package com.ljx.designMode.singleMode;

/**
 * @author LJX
 * @Description: TODO
 * @Date: 2022/11/8 14:33
 * @Version 1.0
 *

volatile的第二个作用:  保证线程之间的操作可见性。
在 JDK1.2 之前，Java的内存模型实现总是从主存（即共享内存）读取变量，是不需要进行特别的注意的。
而在当前 的 Java 内存模型下，线程可以把变量保存本地内存（比如机器的寄存器）中，而不是直接在主存中进行读写。
这就 可能造成一个线程在主存中修改了一个变量的值，而另外一个线程还继续使用它在寄存器中的变量值的拷贝，造成数 据的不一致。
要解决这个问题，就需要把变量声明为 volatile，这就指示 JVM，这个变量是不稳定的，每次使用它都到主存中进行 读取。
详情了解请参考下方链接
https://zhuanlan.zhihu.com/p/250657181
 */
public class Volatile01 {
	public static void main(String[] args) {
		Student student = new Student();
		student.start();
		try {
			Thread.sleep(1);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}

		System.out.println("主线程设置分支线程的参数来及时止损");
		student.setFlag(false);
	}
}

class Student extends Thread{

	private volatile boolean flag=true;

	public  void setFlag(boolean flag) {
		this.flag = flag;
	}

	@Override
	public void run() {
		System.out.println("分支线程进入run方法");
		while (flag){

		}
	}
}